import Storage from 'vue-ls'
import { decrypt, encrypt } from '@/utils/encrypt'

const options = {
  namespace: 'cn.fityun.', // key prefix
  name: 'ls', // name variable Vue.[ls] or this.[$ls],
  storage: 'local', // storage name session, local, memory
}

const { ls } = Storage.useStorage(options)

export class LocalStorage {
  key = ''
  defaultValue = ''
  constructor(key: string, defaultValue: any) {
    this.key = key
    this.defaultValue = defaultValue
  }

  setItem(value: any) {
    const encryptedValue = encrypt(JSON.stringify(value)) // 加密数据
    ls.set(this.key, encryptedValue) // 使用 $ls 来保存值
  }

  getItem() {
    const encryptedValue = ls.get(this.key) // 使用 $ls 来获取值
    if (encryptedValue === undefined) return this.defaultValue
    try {
      const decryptedValue = decrypt(encryptedValue) // 解密数据
      return decryptedValue && decryptedValue !== 'null' && decryptedValue !== 'undefined'
        ? JSON.parse(decryptedValue)
        : this.defaultValue
    } catch (error) {
      return encryptedValue && encryptedValue !== 'null' && encryptedValue !== 'undefined'
        ? encryptedValue
        : this.defaultValue
    }
  }

  removeItem() {
    ls.remove(this.key) // 使用 $ls 来删除值
  }
}
